package com.hzw.core.handler

import android.os.Build
import android.os.Handler
import android.os.Looper
import com.hzw.core.thread.mainLooper

/**
 * 返回一个不受垂直同步影响的[Handler]，异步Handler
 * 其发布的消息和可运行对象不受显示vsync等同步障碍的约束。
 * 发送给异步处理程序的消息可以保证彼此相对排序，但不一定要与来自其他处理程序的消息相对应。
 */
val mainHandler: Handler by lazy {
    if (Build.VERSION.SDK_INT >= 28) Handler.createAsync(mainLooper) else try {
        Handler::class.java.getDeclaredConstructor(
            Looper::class.java,
            Handler.Callback::class.java,
            Boolean::class.javaPrimitiveType // async
        ).newInstance(mainLooper, null, true)
    } catch (ignored: NoSuchMethodException) {
        Handler(mainLooper) // 隐藏的构造函数不存在。退回到同步步构造函数。
    }
}

/**
 * 同步Handler
 */
val mainHandlerSync: Handler by lazy {
    Handler(mainLooper)
}

fun main(block: () -> Unit): Boolean = mainHandler.post(block)

fun mainSync(block: () -> Unit): Boolean = mainHandlerSync.post(block)

